package com.ocp.socket.busi.utils.service.impl;

import com.ocp.socket.busi.utils.mapper.UtilsMapper;
import com.ocp.socket.busi.utils.service.IDataUtilService;
import com.ocp.socket.common.enums.CacheKeyEnum;
import com.ocp.socket.common.utils.RedisUtil;
import com.ocp.socket.common.utils.TableUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Author : lichong
 * @description :
 * @Date Create in 14:33 2019/9/15
 * @Modified By :
 **/
@Service("dataUtilService")
public class DataUtilServiceImpl implements IDataUtilService {
    private static String EXIST_FLAG = "exist";
    @Autowired
    UtilsMapper utilsMapper;
    @Autowired
    private RedisUtil redisUtil;

    /**
     * 如果数据表不存在则创建数据表
     *
     * @param nowTableName  需要创建表的名称
     * @param type
     */
    @Override
    public void createDataTableIfNotExist(String nowTableName, String type) {
        String key = CacheKeyEnum.DATA_TABLE_EXIST.getCacheKey() + nowTableName;
        String existFlag = redisUtil.get(key, String.class);
        if (EXIST_FLAG.equals(existFlag)) {
            return;
        }
        //获取数据表的模板
        String templateName = TableUtils.getTableTemplateName(type);
        //创建数据表
        utilsMapper.createTable(nowTableName, templateName);
        //修改主键信息
        utilsMapper.addInfoPrimary(nowTableName);
        //保存缓存信息
        redisUtil.set(key, EXIST_FLAG, CacheKeyEnum.DATA_TABLE_EXIST.getExpireTime());
    }

    /**
     * 如果状态表的数据不存在测创建状态表
     *
     * @param nowTableName  需要创建表的名称
     * @param type
     */
    @Override
    public void createStatTableIfNotExist(String nowTableName, String type) {
        String key = CacheKeyEnum.STAT_TABLE_EXIST.getCacheKey() + nowTableName;
        String existFlag = redisUtil.get(key, String.class);
        if (EXIST_FLAG.equals(existFlag)) {
            return;
        }
        //获取数据表的模板
        String templateName = TableUtils.getTableTemplateName(type);
        //创建数据表
        utilsMapper.createTable(nowTableName, templateName);
        //保存缓存信息
        redisUtil.set(key, EXIST_FLAG, CacheKeyEnum.STAT_TABLE_EXIST.getExpireTime());
    }

    /**
     * 如果运行数据表的数据不存在测创建数据表
     *
     * @param nowTableName  需要创建表的名称
     * @param type
     */
    @Override
    public void createRunListTableIfNotExist(String nowTableName, String type) {
        String key = CacheKeyEnum.LIST_TABLE_EXIST.getCacheKey() + nowTableName;
        String existFlag = redisUtil.get(key, String.class);
        if (EXIST_FLAG.equals(existFlag)) {
            return;
        }
        //获取数据表的模板
        String templateName = TableUtils.getListTemplateTableName(type);
        //创建数据表
        utilsMapper.createTable(nowTableName, templateName);
        //保存缓存信息
        redisUtil.set(key, EXIST_FLAG, CacheKeyEnum.LIST_TABLE_EXIST.getExpireTime());
    }

}
